package cn.edu.szu;

import javax.swing.JTextArea;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.concurrent.Semaphore;

public class myThread {

    // 读写信号量
    protected static Semaphore rw_mutex;

    // 互斥信号量
    protected static Semaphore mutex;

    // 互斥信号量
    protected static Semaphore mem_mutex;

    // 共享文件
    protected static File file;

    // 共享文本输出框
    protected static JTextArea area;

    // 初始化共享对象
    public static void init(JTextArea _area) {
        // 显示文本的内存块信号量
        mem_mutex = new Semaphore(1);

        // 读写信号量和互斥信号量
        rw_mutex = new Semaphore(1);
        mutex = new Semaphore(1);

        // 创建文件并清空文件内容
        file = new File("test.txt");
        clearFile();

        area = _area;
    }

    // 清空文件，方便重新读写
    public static void clearFile() {
        try {
            FileWriter output = new FileWriter(file);
            output.write("Now Starting!");
            output.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    // wait()操作
    public void P(Semaphore semaphore) {
        try {
            semaphore.acquire();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    // signal()操作
    public  void V(Semaphore semaphore) {
        semaphore.release();
    }

    // 将消息输出文本，锁住area
    protected void printLog(String message) {
        P(mem_mutex);
        area.append(message + "\n");
        V(mem_mutex);
    }

}